#include <iostream>
#include <vector>

#define fup(x,l,r) for (int x = l; x <= r; ++ x)
#define fdn(x,r,l) for (int x = r; x >= l; -- x)

using namespace std;

const int N = 15;

int l, r;
int f[N][N];

void init() { // 预处理所有方案数
    fup (i, 0, 9) f[1][i] = 1; // 只有1位的方案数都为1
    
    fup (i, 2, N) // 一共要填的位数
        fup (j, 0, 9) // j 为最高位上的数
            fup (k, j, 9) // k 为次高位上的数
                f[i][j] += f[i - 1][k]; // 最高位上是j的方案数 += 次高位上是k的方案数（k：j ~ 9）
}

int dp(int n) {
    if (!n) return 1;
    
    vector<int> nums;
    while (n) nums.push_back(n % 10), n /= 10;
    
    int res = 0, last = 0; // 上一位填的数
    fdn (i, nums.size() - 1, 0) {
        int x = nums[i];
        fup (j, last, x - 1) res += f[i + 1][j];
        
        if (x < last) break;
        last = x;
        
        if (!i) res ++ ;
    }
    
    return res;
}

int main() {
    init();
    
    while (scanf("%d%d", &l, &r) == 2) printf("%d\n", dp(r) - dp(l - 1));
    
    return 0;
}